home *** CD-ROM | disk | FTP | other *** search
- (**************************************************************************
-
- $RCSfile: RunOberon0.mod $
- Description: Main module for the Oberon-A implementation of the Oberon0
- System described in Mössenböck's "Object-Oriented
- Programming in Oberon-2".
-
- Created by: fjc (Frank Copeland)
- $Revision: 1.1 $
- $Author: fjc $
- $Date: 1995/07/02 17:02:27 $
-
- Copyright © 1995, Frank Copeland.
- This module is part of Oberon-A.
- See Oberon-A.doc for conditions of use and distribution.
-
- **************************************************************************)
-
- <*STANDARD-*> <*MAIN+*>
- MODULE RunOberon0;
-
- IMPORT
- SYS := SYSTEM, Errors, k := Kernel, Viewers0, Shapes0, Rectangles0,
- Texts0, FoldElems0, GraphicElems0, Edit0, Draw0, Oberon0, d := Dos,
- wb := Workbench;
-
- VAR
- startDir : d.FileLockPtr;
-
- PROCEDURE Register;
-
- VAR
- <* IF REGISTER THEN *>
- node : k.RegNode;
- <* ELSE *>
- mod : k.Module; typ : k.Type; cmd : k.Command;
- <* END *>
-
-
- <* IF REGISTER THEN *>
- PROCEDURE PrintModule ( modName : ARRAY OF CHAR );
-
- VAR mod : k.Module; node : k.RegNode;
-
- <*$CopyArrays-*>
- BEGIN (* PrintModule *)
- mod := k.FindModule (modName);
- IF mod # NIL THEN
- d.PrintF ("Module '%s'\n", SYS.ADR (modName));
- node := mod.types;
- IF node # NIL THEN
- WHILE node # NIL DO
- d.PrintF (" type: '%s'\n", SYS.ADR (node.name));
- node := node.next
- END;
- ELSE
- d.PrintF (" no types\n", NIL)
- END;
- node := mod.commands;
- IF node # NIL THEN
- WHILE node # NIL DO
- d.PrintF (" command: '%s'\n", SYS.ADR (node.name));
- node := node.next
- END;
- ELSE
- d.PrintF (" no commands\n", NIL)
- END;
- ELSE
- d.PrintF ("Could not find module '%s'\n", SYS.ADR (modName))
- END;
- END PrintModule;
- <* END *>
-
- BEGIN (* Register *)
- <* IF REGISTER THEN *>
- (*
- node := k.modules;
- WHILE node # NIL DO
- PrintModule (node.name);
- node := node.next
- END;
- *)
- <* ELSE *>
- mod := k.RegisterModule ("Viewers0");
- cmd := k.RegisterCommand (mod, "Close", Viewers0.Close);
- cmd := k.RegisterCommand (mod, "Copy", Viewers0.Copy);
- mod := k.RegisterModule ("Shapes0");
- typ := k.RegisterType (mod, SYS.TAG (Shapes0.Graphic));
- mod := k.RegisterModule ("Rectangles0");
- typ := k.RegisterType (mod, SYS.TAG (Rectangles0.Rectangle));
- cmd := k.RegisterCommand (mod, "Set", Rectangles0.Set);
- mod := k.RegisterModule ("Texts0");
- typ := k.RegisterType (mod, SYS.TAG (Texts0.Element));
- mod := k.RegisterModule ("FoldElems0");
- typ := k.RegisterType (mod, SYS.TAG (FoldElems0.Element));
- cmd := k.RegisterCommand (mod, "Insert", FoldElems0.Insert);
- mod := k.RegisterModule ("GraphicElems0");
- typ := k.RegisterType (mod, SYS.TAG (GraphicElems0.Element));
- cmd := k.RegisterCommand (mod, "Insert", GraphicElems0.Insert);
- cmd := k.RegisterCommand (mod, "Update", GraphicElems0.Update);
- mod := k.RegisterModule ("Edit0");
- cmd := k.RegisterCommand (mod, "Open", Edit0.Open);
- cmd := k.RegisterCommand (mod, "Store", Edit0.Store);
- cmd := k.RegisterCommand (mod, "ChangeFont", Edit0.ChangeFont);
- mod := k.RegisterModule ("Draw0");
- cmd := k.RegisterCommand (mod, "Open", Draw0.Open);
- cmd := k.RegisterCommand (mod, "Store", Draw0.Store);
- <* END *>
- END Register;
-
- PROCEDURE* Cleanup ( VAR rc : LONGINT );
-
- VAR ignore : d.FileLockPtr;
-
- BEGIN (* Cleanup *)
- ignore := d.CurrentDir (startDir); startDir := NIL
- END Cleanup;
-
- PROCEDURE Init;
-
- VAR wbStartup : wb.WBStartupPtr;
-
- BEGIN (* Init *)
- IF k.fromWorkbench THEN
- wbStartup := SYS.VAL (wb.WBStartupPtr, k.WBenchMsg);
- IF wbStartup.numArgs > 0 THEN
- startDir := d.CurrentDir (wbStartup.argList[0].lock);
- k.SetCleanup (Cleanup)
- END
- END
- END Init;
-
- BEGIN
- Errors.Init();
- Register;
- Init;
- Oberon0.Loop
- END RunOberon0.
-